package org.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.itheima.mapper.ArticleMapper;
import org.itheima.pojo.Article;
import org.itheima.pojo.PageBean;
import org.itheima.service.ArticleService;
import org.itheima.utils.ThreadLocalUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Service
public class ArticleServiceImpl implements ArticleService {

    @Autowired
    private ArticleMapper articleMapper;

    @Override
    public void addArticle(Article article) {
        //时间
        //新增文章
        article.setCreateTime(LocalDateTime.now());
        article.setUpdateTime(LocalDateTime.now());
        Map<String,Object> map = ThreadLocalUtil.get();
        Integer userId = (Integer) map.get("Id");
        article.setCreateUser(userId);
        articleMapper.addArt(article);

    }

    //文章列表
    @Override
    public PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {
        //1、创建pagebean对象
        PageBean<Article> pb = new PageBean<>();

        //2、开启分页查询,需要使用插件PageHelper，要使用的画需要导入依赖在pom.xml中
        PageHelper.startPage(pageNum, pageSize);//这个插件会把pageNum, pageSize自动拼接到sql后面，所以不用返回到mapper值 里面
        //3、调用mapper，执行SQL语句
        //从 ThreadLocalUtil 中获取存储的用户信息，然后提取出用户 ID 并转换为 Integer 类型。
        //ThreadLocalUtil.get();获取一个（实体类的集合）<String,Object>对象，然后通过map.get("Id")获取id
        Map<String,Object> map = ThreadLocalUtil.get();
        Integer userId = (Integer) map.get("Id");

        List<Article> as = articleMapper.list(userId,categoryId,state); //注意这里面有一个创建用户的id所以要传入一个userId来确认
        //page中提供了方法，可以获取pagehelper分页查询后得到的总记录的条数和当前页的数据
        Page<Article> p = (Page<Article>) as;

        //把数据填充到怕个pagebean对象中，因为最终这个方法返回的是一个pagebean，PageBean<Article>里面承载的分页查询到的数据
        pb.setTotal(p.getTotal());//获取当前页总条数
        pb.setItems(p.getResult());//获取当前页的数据集合，就是items数据集合data
        return pb;//返回所有接收的数据
    }


    //文章详情
    @Override
    public Article findByid(Integer id) {
        Article article = articleMapper.findByid(id);
        return article;
    }
    //更新文章
    @Override
    public void update(Article article) {
        article.setUpdateTime(LocalDateTime.now());
        articleMapper.update(article);
    }
    //删除文章
    @Override
    public void del(Integer id) {
        articleMapper.del(id);
    }



}
